import sys
import os

# 添加Odoo路径
sys.path.append('f:\\odoo')
os.environ['PYTHONPATH'] = 'f:\\odoo'

# 导入Odoo核心模块
import odoo
from odoo import api, models, registry, SUPERUSER_ID
from odoo.modules.registry import Registry

# 初始化Odoo环境
odoo.tools.config.parse_config(['--addons-path=f:\\odoo\\addons'])

dbname = 'ncs'  # 替换为你的数据库名称

# 连接数据库
with registry(dbname).cursor() as cr:
    env = api.Environment(cr, SUPERUSER_ID, {})

    # 先检查模块状态
    module = env['ir.module.module'].search([('name', '=', 'my_task_module')])
    if not module:
        print("模块未找到，请确保模块在addons目录中")
        sys.exit(1)
    
    print(f"模块状态: {module.state}")
    if module.state != 'installed':
        print("尝试安装模块...")
        try:
            module.button_install()
            cr.commit()
            print("模块安装成功")
            # 强制刷新注册表
            print("刷新模型注册表...")
            Registry.new(dbname)
            print("注册表刷新成功")
        except Exception as e:
            print(f"模块安装失败: {e}")
            sys.exit(1)

    # 安装并刷新后，重新获取环境
    cr = registry(dbname).cursor()
    env = api.Environment(cr, SUPERUSER_ID, {})

    # 检查模型是否存在
    try:
        model = env['my.task']
        print(f"模型 'my.task' 存在")
    except KeyError:
        print("模型 'my.task' 不存在，可能是模型定义有问题")
        # 检查ir.model表中是否有该模型
        model_record = env['ir.model'].search([('model', '=', 'my.task')])
        if model_record:
            print(f"模型在数据库中存在，ID: {model_record.id}")
        else:
            print("模型在数据库中不存在，请检查模型定义")
        sys.exit(1)

    # 检查外部ID是否存在
    xmlid = 'model_my_task'
    try:
        # 尝试查找外部ID
        res_id = env['ir.model.data']._xmlid_to_res_id(xmlid)
        print(f"外部ID '{xmlid}' 已存在，对应ID: {res_id}")
    except ValueError:
        print(f"外部ID '{xmlid}' 不存在，正在创建...")
        # 获取模型的ID
        model_id = env['ir.model']._get('my.task').id
        # 创建ir.model.data记录
        env['ir.model.data'].create({
            'name': 'model_my_task',
            'module': 'my_task_module',
            'model': 'ir.model',
            'res_id': model_id
        })
        print(f"外部ID '{xmlid}' 创建成功")
        cr.commit()